In a program written in an object-oriented language, a root set of references contains variables, immediately accessible to the program, that point to (or reference) objects. Objects are “reachable” by the program, or “live” if they can be accessed through a chain of references starting at the root set. Other objects that cannot be referenced through the chain are unreachable, and cannot be executed by the program. The memory associated with such unreachable objects can thus be reclaimed, and the unreachable objects may be tagged or listed as candidates for garbage collection.
Garbage collection is the automatic reclamation of computer storage. Paul R. Wilson, “Uniprocessor Garbage Collection Techniques”, 1992, available on the Web at ftp.cs.utexas.edu/pub/garbage/gcsummary.ps, and Bill Venners, “Garbage Collection”, Chapter 9 of Inside the Java Virtual Machine, on the Web at www.artima.com/insidejvm/ed2/gcP.html, both of which are incorporated by reference herein, both of which provide excellent surveys of different garbage collection techniques, the individual aspects of which are beyond the scope of this disclosure.
In an object oriented language such as Java, it is common for some objects to have a declared finalizer method, to be called when the system determines that there are no active references to the object and that the object is thus eligible to have its memory reclaimed. Declaring a finalizer allows the developer to perform some operations, such as freeing system resources, prior to the system's reclaiming the object's memory. The finalizer construct normally co-exists with the idea of automatic garbage collection.